export default {
  namespaced: true, // 开启命名空间，默认是不开启命名空间，但实际开发，基本都开启了
  state: {
    // 默认自带了命名空间
    // 访问：this.$store.state.user.username
    username: '张三',
    age: 18
  },
  mutations: {
    // 默认没有带命名空间
    // 访问（了解，非命名空间下访问，实际开发基本不用）：this.$store.commit('SETUSERNAME',实参)
    // 访问（命名空间下访问）：this.$store.commit('user/SETUSERNAME',实参)
    SETUSERNAME (state, value) {
      state.username = value
    }
  },
  getters: {
    // 访问（命名空间下访问）:this.$store.getters["user/getUsername"]
    // .号后面要符合命名规范
    // 补充：不是很重要，知道有这么回事就可以了
    /*
   getters:{
         方法名(state,getters,rootState,rootGetters){
          state:当前模块的state对象
          getters:当前模块的getters,作用用于getters方法间互相使用
          rootState:根模块的state数据 ,可以访问所有模块的state rootState===this.$store.state
          rootGetters:根模块的getters,可以访问所有模块的getters  rootGetters===this.$store.getters
         }
   }
*/

    getUsername (state, getters, rootState, rootGetters) {
      return (
        '姓名:' +
        state.username +
        '----' +
        getters.nameTxt +
        '----' +
        rootState.num +
        '-----' +
        rootGetters.getNum +
        '---------' +
        rootGetters['home/getHomeName']
      )
    },
    nameTxt () {
      return '我是getters'
    }
  },
  actions: {
    // 访问（命名空间下访问）：this.$store.dispatch('user/refreshUsername',实参)
    refreshUsername (ctx, value) {
      console.log('ctx', ctx)
      // console.log(ctx.state.username)
      console.log(ctx.rootState.num)
      /*
      ctx:{
        state:当前模块的state
        rootState:根模块下的state
        getters:当前模块下的getters
        rootGetters:根模块下的getters
        commit:调用mutations
             调用当前模块：ctx.commit('方法名',实参)
             调用其它模块:ctx.commit('模块名/方法名',实参,{root:true})
             调用根模块:ctx.commit('方法名',实参,{root:true})
        dispatch:调用actions
             调用当前模块:  ctx.dispatch(方法名,实参)
             调用其它模块:ctx.dispatch('模块名/方法名',实参,{root:true})
             调用根模块(几乎不用):ctx.dispatch('方法名',实参,{root:true})

      }
      */
      ctx.commit('home/SETUSERNAME', null, { root: true })
      ctx.dispatch('testActions')
      ctx.dispatch('home/testHomeActions', null, { root: true })
      ctx.dispatch('refreshNum', 999, { root: true })
      setTimeout(() => {
        ctx.commit('SETUSERNAME', value)
      }, 1000)
    },
    testActions () {
      console.log('user模块下的testActions')
    }
  }
}
